const mongoose = require('mongoose')
const bcrypt = require('bcrypt')

const saltLength = 10
// const Joi=require('joi') //用于验证提价用户的数据是否规范.
const userSchema = new mongoose.Schema({
  userId: mongoose.Schema.Types.ObjectId,
  username: {
    type: String,
    minlength: 2,
    required: true
  },

  password: {
    type: String,
    // minlength:2,
    required: true

  },
  createAt: {
    type: Date,
    default: Date.now()
  },
  lastLoginAt: {
    type: Date,
    default: Date.now()
  }
  // role:{
  //     type:String,
  //     required:true,

  // },
  // state:{
  //     type:Number,
  //     default:0
  // }
})

// user.create({username:'zz',email:'a120@qq.com',password:'123456',role:'admin',state:0})

// 用于验证从客户端输入提交的文字是否符合数据库的规范.
// const verify=body=>{

//     const Schema={
//         username:Joi.string().min(2).max(10).required().error(new Error('用户名不符合规范')),
//         email:Joi.string().email().required().error(new Error('邮箱格式不对')),
//         password:Joi.string().min(2).regex(/^[a-zA-Z0-9]{3,15}$/).required().error(new Error('密码不符合规范')),
//         role:Joi.string().valid('normal','admin').required().error(new Error('角色值输入错误')),
//         state:Joi.number().valid(0,1).error(new Error('状态值出错'))
//     }
//     return Joi.validate(body,Schema)
// }
// 监听数据存储事件
// 如果用户保存 则对密码进行加盐加密
userSchema.pre('save', function (next) {
  console.log('开始加密')
  bcrypt.genSalt(saltLength, (err, salt) => {
    if (err) return next(err)
    bcrypt.hash(this.password, salt, (err, pwd) => {
      if (err) return next(err)
      this.password = pwd
      next()
      // console.log('jiami',pwd,this.password)
    })
  })
})

const user = mongoose.model('user', userSchema)

module.exports = {
  user
  // verify
}
